# set 集合
import random

"""
set :
    特点：无序的，所以无下标
    符号：{} {元素、元素、元素}----->集合
        {}  {k:v,kk:v}---------> 字典
    定义空set：
        st = set() # 定义空set
        st = {} # 表示字典
    增加：
        add
        update( x ) ：也可以添加元素，且参数可以是列表，元组，字典等。
    删除：
        remove： 有元素删除、如果没有报错：keyError
        discard：有就删除，没有就不删除
        del： 删除集合
        clear：清空集合
    交集、并集、差集:
        difference 或者 -: 差集 
        intersection 或者 &：交集 
        union 或者 |: 并集 
    
"""

st = {'zhangsan'}
print(type(st))

lst = [1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3]

print(lst)
print(set(lst))  # 去重

st = set()  # 定义空set
print(type(st))

# set 增加
st.add('张三')
st.add('李四')
st.add('王五')
print(st)
st1 = {'赵六'}  # 集合合并
st.update(st1)
print(st)  # 每一次的顺序无需，

# set 删除
st.remove('张三')
print(st)

print('生成字母数字的验证码'.center(40, '#'))
'''
练习：
    产生 5组不允许重复，字母和数字组合4位验证码
    s = 'qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM123456789'
    也可以采用函数：random.choice(s)  或者 random.random(0,len(s)-1)
'''
code_set = set()
while len(code_set) < 5:

    strs = ''
    while len(strs) < 4:
        num = random.randint(0, 127)
        if ord('a') < num < ord('z') or ord('A') < num < ord('Z'):
            strs += chr(num)
        elif 0 <= num <= 9:
            strs += str(num)
    code_set.add(strs)

print("5组4位随机验证码：{}".format(code_set))

# 补充删除
# del code_set  # 删除集合
# code_set.clear()  # 清空
code_set.pop()  # 随机删除

# 交集、并集、差集
set1 = {1, 2, 3, 4, 5, 6, 7}
set2 = {6, 7, 8, 9, 0}
print(set1.intersection(set2))  # 交集
print(set1.union(set2))  # 并集
print(set1.difference(set2))  # 差集：有顺序
print(set2.difference(set1))  # 差集

#  | & -

print(set1 & set2)  # 交集
print(set1 | set2)  # 并集
print(set1 - set2)  # 差集
